import list.CircleLinkedList;
import list.List;

/**
 * @author 陈艺博
 * @date 2021-02-25 08:48
 * @description 双端队列
 **/
public class Deque<E> {
    private List<E> list = new CircleLinkedList<E>();

    public int size() {
        return list.size();
    }

    public boolean isEmpty() {
        return list.isEmpty();
    }


    /**
     * 队尾添加元素
     *
     * @param element
     */
    public void enQueueRead(E element) {
        list.add(element);
    }

    /**
     * 队头添加元素
     *
     * @param element
     */
    public void enQueueFront(E element) {
        list.add(0, element);
    }

    /**
     * 对头出队
     *
     * @return
     */
    public E deQueueFront() {
        return list.remove(0);
    }

    /**
     * 队尾出队
     *
     * @return
     */
    public E deQueueRead() {
        return list.remove(list.size() - 1);
    }

    /**
     * 获取队列的头元素
     *
     * @return
     */
    public E front() {
        return list.get(0);
    }

    /**
     * 获取队列的尾元素
     *
     * @return
     */
    public E rear() {
        return list.get(list.size() - 1);
    }
}
